package com.zzx.boot.controller;

import com.zzx.boot.common.R;
import lombok.extern.slf4j.Slf4j;
import org.apache.coyote.InputBuffer;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.multipart.MultipartFile;

import javax.servlet.http.HttpServletResponse;
import java.io.*;
import java.util.UUID;

@RestController
@RequestMapping("/common")
@Slf4j
public class CommonController {
//    从配置文件中获取路径

    @Value("${file.path}")
    private String basePath;

    @PostMapping("/upload")
//    如果参数 是MultiparFile格式的 表示接收的是文件
    public R<String> upload(MultipartFile file) {
        log.info("{}",file);
        //判断路径是否存在
        File file1 = new File(basePath);
        //如果文件不存在则创建
        if (!file1.exists()){
            file1.mkdirs();
        }
        //获取文件的名称
        String originalFilename = file.getOriginalFilename();
        //截取文件名称的最后一段
        String subfix1 = originalFilename.substring(originalFilename.lastIndexOf("."));
        //使用UUID创建一个随机的文件
        String username = UUID.randomUUID().toString();
        try{
       //将文件转存到哪里
       file.transferTo(new File(basePath+username+subfix1));
   }catch (Exception e){
       e.printStackTrace();
   }

        return R.success(username+subfix1);
    }

    @GetMapping("/download")
    public void download(String name, HttpServletResponse response){

      try(
              //创建一个字节输入流读取文件
              BufferedInputStream bis= new BufferedInputStream(
                      new FileInputStream(new File(basePath+name)));
              //获取字节输出流
              BufferedOutputStream bos = new BufferedOutputStream(response.getOutputStream());
              ){
          response.setContentType("image/jpeg");
            //读取数据
          //创建一个字节数组
          byte[] bys = new byte[1024];
          //创建一个指针
          int len =0;
          while((len = bis.read(bys))!=-1){
              //将数据写入到浏览器中
              bos.write(bys,0,len);
          }
      }catch (Exception e){
          e.printStackTrace();
      }

    }

    /**
     * 文件上传 步骤
     *  1. 定义一个方法 有一个参数 MultipartFile类型的参数
     *  2. 获取他的文件名称
     *  3. 将他转存到其他路径 默认是在临时文件中 请求结束就消失了
     */

}
